#include<iostream>
#include<unistd.h>
#include<mysql/mysql.h>
#include<string>

const std::string host = "127.0.0.1";
// const std::string host = "localhost";
const std::string user = "connector";
const std::string password = "123456";
const std::string db = "connect";
const unsigned int port = 3306;

int main()
{
    // std::cout << "mysql clinet version" << mysql_get_client_info()<<std::endl;

    MYSQL* my= mysql_init(nullptr);
    if(my == nullptr)
    {
        std::cerr << "mysql init error!" << std::endl;
        return 1;
    }
    if(mysql_real_connect(my,host.c_str(),user.c_str(),
    password.c_str(),db.c_str(),port,nullptr,0) == nullptr)
    {
        std::cerr << "mysql connect error!" << std::endl;
        return 2;
    }
    // std::cout << "connect sucess!" <<std::endl;

    std::string sql = "select * from user";
    int n = mysql_query(my,sql.c_str());
    if (n != 0)
    {
        std::cout << sql << " faild!" << std::endl;
        return 3;
    }
    MYSQL_RES* res = mysql_store_result(my);
    if(res == nullptr)
    {
        std::cerr<< "mysql_store_result error!" <<std::endl; 
        return 4;
    }

    my_ulonglong rows =mysql_num_rows(res);
    my_ulonglong fields = mysql_num_fields(res);     

    MYSQL_FIELD* fields_array = mysql_fetch_fields(res);
    for(int i = 0;i<fields;i++)
    {
        std::cout << fields_array[i].name << "\t";
    }
    std::cout << "\n";
    




    MYSQL_ROW row;
    for(int i = 0;i< rows ;i++)
    {
        row = mysql_fetch_row(res);
        for(int j = 0;j<fields;j++)
        {
            std::cout << row[j] << "\t"; 
        }
        std::cout << "\n";
    }



    // std::cout<<"行: "  << rows <<std::endl; 
    // std::cout<<"列: " <<fields <<std::endl;

    // std::string sql;
    // while (true)
    // {
    //     std::cout << "MYSQL>>> ";
    //     if(!std::getline(std::cin, sql) || sql == "quit") 
    //     {
    //         std::cout << "bye!" <<std::endl;
    //         break;
    //     }

    //     int n = mysql_query(my, sql.c_str());
    //     if(n == 0) 
    //     {
    //         std::cout << sql << " sucess!" <<std::endl;
    //     }
    //     else 
    //     {
    //         std::cerr << sql <<" failed!" << n <<std::endl;
    //     }
    // }
    // std::string sql = "insert into user(name,age,telephone) values('张三',12,123123)";
    // int n = mysql_query(my, sql.c_str());
    // if (n == 0)
    // {
    //     std::cout << sql << " sucess!" << std::endl;
    // }
    // else
    // {
    //     std::cerr << sql << " failed!" << n << std::endl;
    // }

    mysql_free_result(res);
    mysql_close(my);

    return 0;
}